<?php
// +----------------------------------------------------------------------
// | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2017 http://www.thinkcmf.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 老猫 <thinkcmf@126.com>
// +----------------------------------------------------------------------
namespace app\portal\controller;

use app\admin\model\ThemeModel;
use app\portal\model\PortalCategoryModel;
use app\portal\model\PortalPostModel;
use app\portal\service\PostService;
use cmf\controller\AdminBaseController;
use think\Db;

class AdminArticleController extends AdminBaseController {
	/**
	 * 文章列表
	 * @adminMenu(
	 *     'name'   => '文章管理',
	 *     'parent' => 'portal/AdminIndex/default',
	 *     'display'=> true,
	 *     'hasView'=> true,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '文章列表',
	 *     'param'  => ''
	 * )
	 */
	public function index() {
		$param = $this->request->param();

		$categoryId = $this->request->param('category', 0, 'intval');

		$postService = new PostService();
		$data = $postService->adminArticleList($param);

		$data->appends($param);

		$portalCategoryModel = new PortalCategoryModel();
		$categoryTree = $portalCategoryModel->adminCategoryTree($categoryId);

		$this->assign('start_time', isset($param['start_time']) ? $param['start_time'] : '');
		$this->assign('end_time', isset($param['end_time']) ? $param['end_time'] : '');
		$this->assign('keyword', isset($param['keyword']) ? $param['keyword'] : '');
		$this->assign('articles', $data->items());
		$this->assign('category_tree', $categoryTree);
		$this->assign('category', $categoryId);
		$this->assign('page', $data->render());

		return $this->fetch();
	}

	/**
	 * 添加文章
	 * @adminMenu(
	 *     'name'   => '添加文章',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> true,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '添加文章',
	 *     'param'  => ''
	 * )
	 */
	public function add() {
		$themeModel = new ThemeModel();
		$articleThemeFiles = $themeModel->getActionThemeFiles('portal/Article/index');
		$this->assign('article_theme_files', $articleThemeFiles);
		return $this->fetch();
	}

	/**
	 * 添加文章提交
	 * @adminMenu(
	 *     'name'   => '添加文章提交',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> false,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '添加文章提交',
	 *     'param'  => ''
	 * )
	 */
	public function addPost() {
		if ($this->request->isPost()) {
			$data = $this->request->param();
			$post = $data['post'];
			$result = $this->validate($post, 'AdminArticle');
			if ($result !== true) {
				$this->error($result);
			}

			$portalPostModel = new PortalPostModel();

			if (!empty($data['photo_names']) && !empty($data['photo_urls'])) {
				$data['post']['more']['photos'] = [];
				foreach ($data['photo_urls'] as $key => $url) {
					$photoUrl = cmf_asset_relative_url($url);
					array_push($data['post']['more']['photos'], ["url" => $photoUrl, "name" => $data['photo_names'][$key]]);
				}
			}

			if (!empty($data['file_names']) && !empty($data['file_urls'])) {
				$data['post']['more']['files'] = [];
				foreach ($data['file_urls'] as $key => $url) {
					$fileUrl = cmf_asset_relative_url($url);
					array_push($data['post']['more']['files'], ["url" => $fileUrl, "name" => $data['file_names'][$key]]);
				}
			}

			$portalPostModel->adminAddArticle($data['post'], $data['post']['categories']);

			//对应分类文章数+1
			Db::name('portal_category')->where(['id' => $data['post']['categories']])->setInc('post_count');

			$data['post']['id'] = $portalPostModel->id;
			$hookParam = [
				'is_add' => true,
				'article' => $data['post'],
			];
			hook('portal_admin_after_save_article', $hookParam);

			$this->success('添加成功!', url('AdminArticle/edit', ['id' => $portalPostModel->id]));
		}

	}

	/**
	 * 编辑文章
	 * @adminMenu(
	 *     'name'   => '编辑文章',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> true,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '编辑文章',
	 *     'param'  => ''
	 * )
	 */
	public function edit() {
		$id = $this->request->param('id', 0, 'intval');

		$portalPostModel = new PortalPostModel();
		$post = $portalPostModel->where('id', $id)->find();
		$postCategories = $post->categories()->alias('a')->column('a.name', 'a.id');
		$postCategoryIds = implode(',', array_keys($postCategories));

		$themeModel = new ThemeModel();
		$articleThemeFiles = $themeModel->getActionThemeFiles('portal/Article/index');
		$this->assign('article_theme_files', $articleThemeFiles);
		$this->assign('post', $post);
		$this->assign('post_categories', $postCategories);
		$this->assign('post_category_ids', $postCategoryIds);

		return $this->fetch();
	}

	/**
	 * 编辑文章提交
	 * @adminMenu(
	 *     'name'   => '编辑文章提交',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> false,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '编辑文章提交',
	 *     'param'  => ''
	 * )
	 */
	public function editPost() {

		if ($this->request->isPost()) {
			$data = $this->request->param();
			$post = $data['post'];
			$result = $this->validate($post, 'AdminArticle');
			if ($result !== true) {
				$this->error($result);
			}

			$portalPostModel = new PortalPostModel();

			if (!empty($data['photo_names']) && !empty($data['photo_urls'])) {
				$data['post']['more']['photos'] = [];
				foreach ($data['photo_urls'] as $key => $url) {
					$photoUrl = cmf_asset_relative_url($url);
					array_push($data['post']['more']['photos'], ["url" => $photoUrl, "name" => $data['photo_names'][$key]]);
				}
			}

			if (!empty($data['file_names']) && !empty($data['file_urls'])) {
				$data['post']['more']['files'] = [];
				foreach ($data['file_urls'] as $key => $url) {
					$fileUrl = cmf_asset_relative_url($url);
					array_push($data['post']['more']['files'], ["url" => $fileUrl, "name" => $data['file_names'][$key]]);
				}
			}

			$portalPostModel->adminEditArticle($data['post'], $data['post']['categories']);

			$hookParam = [
				'is_add' => false,
				'article' => $data['post'],
			];
			hook('portal_admin_after_save_article', $hookParam);

			$this->success('保存成功!');

		}
	}

	/**
	 * 文章删除
	 * @adminMenu(
	 *     'name'   => '文章删除',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> false,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '文章删除',
	 *     'param'  => ''
	 * )
	 */
	public function delete() {
		$param = $this->request->param();
		$portalPostModel = new PortalPostModel();

		if (isset($param['id'])) {
			$id = $this->request->param('id', 0, 'intval');
			$result = $portalPostModel->where(['id' => $id])->find();
			$data = [
				'object_id' => $result['id'],
				'create_time' => time(),
				'table_name' => 'portal_post',
				'name' => $result['post_title'],
			];
			$resultPortal = $portalPostModel
				->where(['id' => $id])
				->update(['delete_time' => time()]);
			if ($resultPortal) {
				Db::name('portal_category_post')->where(['post_id' => $id])->update(['status' => 0]);
				Db::name('portal_tag_post')->where(['post_id' => $id])->update(['status' => 0]);

				Db::name('recycleBin')->insert($data);
			}
			$this->success("删除成功！", '');

		}

		if (isset($param['ids'])) {
			$ids = $this->request->param('ids/a');
			$recycle = $portalPostModel->where(['id' => ['in', $ids]])->select();
			$result = $portalPostModel->where(['id' => ['in', $ids]])->update(['delete_time' => time()]);
			if ($result) {
				foreach ($recycle as $value) {
					$data = [
						'object_id' => $value['id'],
						'create_time' => time(),
						'table_name' => 'portal_post',
						'name' => $value['post_title'],
					];
					Db::name('recycleBin')->insert($data);
				}
				$this->success("删除成功！", '');
			}
		}
	}

	/**
	 * 文章发布
	 * @adminMenu(
	 *     'name'   => '文章发布',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> false,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '文章发布',
	 *     'param'  => ''
	 * )
	 */
	public function publish() {
		$param = $this->request->param();
		$portalPostModel = new PortalPostModel();

		if (isset($param['ids']) && isset($param["yes"])) {
			$ids = $this->request->param('ids/a');

			$portalPostModel->where(['id' => ['in', $ids]])->update(['post_status' => 1, 'published_time' => time()]);

			$this->success("发布成功！", '');
		}

		if (isset($param['ids']) && isset($param["no"])) {
			$ids = $this->request->param('ids/a');

			$portalPostModel->where(['id' => ['in', $ids]])->update(['post_status' => 0]);

			$this->success("取消发布成功！", '');
		}

	}

	/**
	 * 文章置顶
	 * @adminMenu(
	 *     'name'   => '文章置顶',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> false,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '文章置顶',
	 *     'param'  => ''
	 * )
	 */
	public function top() {
		$param = $this->request->param();
		$portalPostModel = new PortalPostModel();

		if (isset($param['ids']) && isset($param["yes"])) {
			$ids = $this->request->param('ids/a');

			$portalPostModel->where(['id' => ['in', $ids]])->update(['is_top' => 1]);

			$this->success("置顶成功！", '');

		}

		if (isset($_POST['ids']) && isset($param["no"])) {
			$ids = $this->request->param('ids/a');

			$portalPostModel->where(['id' => ['in', $ids]])->update(['is_top' => 0]);

			$this->success("取消置顶成功！", '');
		}
	}

	/**
	 * 文章推荐
	 * @adminMenu(
	 *     'name'   => '文章推荐',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> false,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '文章推荐',
	 *     'param'  => ''
	 * )
	 */
	public function recommend() {
		$param = $this->request->param();
		$portalPostModel = new PortalPostModel();

		if (isset($param['ids']) && isset($param["yes"])) {
			$ids = $this->request->param('ids/a');

			$portalPostModel->where(['id' => ['in', $ids]])->update(['recommended' => 1]);

			$this->success("推荐成功！", '');

		}
		if (isset($param['ids']) && isset($param["no"])) {
			$ids = $this->request->param('ids/a');

			$portalPostModel->where(['id' => ['in', $ids]])->update(['recommended' => 0]);

			$this->success("取消推荐成功！", '');

		}
	}

	/**
	 * 文章排序
	 * @adminMenu(
	 *     'name'   => '文章排序',
	 *     'parent' => 'index',
	 *     'display'=> false,
	 *     'hasView'=> false,
	 *     'order'  => 10000,
	 *     'icon'   => '',
	 *     'remark' => '文章排序',
	 *     'param'  => ''
	 * )
	 */
	public function listOrder() {
		parent::listOrders(Db::name('portal_category_post'));
		$this->success("排序更新成功！", '');
	}

	public function move() {

	}

	public function copy() {

	}

}
